﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;

namespace TES.WEB.EnteRegulador
{
    public class MockMerge
    {
        #region CAMPOS

            private int _numeroRed;


            private string _regional;


            private string _enlace;


            private string _estadoEnlace;


            private string _estadoLegalizacion;


            private bool _completo;


            private bool _implementado;

        #endregion

        #region PROPIEDADES

            public int NumeroRed
            {
                get { return _numeroRed; }
                set { _numeroRed = value; }
            }
            public string Regional
            {
                get { return _regional; }
                set { _regional = value; }
            }
            public string Enlace
            {
                get { return _enlace; }
                set { _enlace = value; }
            }
            public string EstadoEnlace
            {
                get { return _estadoEnlace; }
                set { _estadoEnlace = value; }
            }
            public string EstadoLegalizacion
            {
                get { return _estadoLegalizacion; }
                set { _estadoLegalizacion = value; }
            }
            public bool Completo
            {
                get { return _completo; }
                set { _completo = value; }
            }
            public bool Implementado
            {
                get { return _implementado; }
                set { _implementado = value; }
            }

        #endregion

        #region CONSTRUCTOR

            public MockMerge()
            {
 
            }
           

            public  MockMerge(int numerored, string regional, string enlace, string estadoenlace, string estadolegalizacion, bool completo, bool implementado)
            {
                this._numeroRed = numerored;
                this._regional = regional;
                this._enlace = enlace;
                this._estadoEnlace = estadoenlace;
                this._estadoLegalizacion = estadolegalizacion;
                this._completo = completo;
                this._implementado = implementado;
            }

        #endregion

        #region METODOS



            public static List<MockMerge> GetDatos(string sortExpression, string direction, string filtrarRed, string filtrarRegional, string filtrarEnlace, string filtrarEstadoLegalizacion, string filtrarEstadoEnlace, string filtrarCompleto, string filtrarImplementado)
            {


                List<MockMerge> lista = new List<MockMerge>();

                MockMerge enlace = new MockMerge(1, "Norte", "Alguno", "Parece que funciona", "No se va a legalizar", true, false);
                MockMerge enlace1 = new MockMerge(2, "Costa", "Otro", "No funciona", "No se va a legalizar", false, true);
                MockMerge enlace2 = new MockMerge(3, "Norte", "Alguno", "Parece que funciona", "No se va a legalizar", true, true);
                MockMerge enlace3 = new MockMerge(4, "Costa", "Otro", "No funciona", "No se va a legalizar", false, true);
                MockMerge enlace4 = new MockMerge(3, "Costa", "Otro", "No funciona", "No se va a legalizar", true, false);
                lista.Add(enlace2);
                lista.Add(enlace1);
                lista.Add(enlace3);
                lista.Add(enlace);
                lista.Add(enlace4);

                if (filtrarRed != null || filtrarRegional != null || filtrarEnlace != null || filtrarEstadoEnlace != null || filtrarEstadoLegalizacion != null || filtrarCompleto != null || filtrarImplementado != null)
                {
                    if (sortExpression == "NINGUNO")
                    {
                        return FiltrarLista(filtrarRed, filtrarRegional, filtrarEnlace, filtrarEstadoEnlace, filtrarEstadoLegalizacion, filtrarCompleto, filtrarImplementado, lista);
                    }
                    else
                    {
                        return SortGridView(sortExpression, direction, FiltrarLista(filtrarRed, filtrarRegional, filtrarEnlace, filtrarEstadoEnlace, filtrarEstadoLegalizacion, filtrarCompleto, filtrarImplementado, lista));
                    }
                }

                if (sortExpression == "NINGUNO")
                    return lista;
                else
                    return SortGridView(sortExpression, direction, lista);
                
            }

            private static List<MockMerge> SortGridView(string sortExpression, string direction, List<MockMerge> lista )
            {
                if (sortExpression != null && sortExpression != string.Empty)
                {
                    ComparadorMockMerge comparador = new ComparadorMockMerge(sortExpression);
                    lista.Sort(comparador);

                }

                //Now that we have sorted check to see if the sort direction is desc
                if (direction != null && direction == "DESC")
                {
                    lista.Reverse();
                }


                return lista;
            }

            private static List<MockMerge> FiltrarLista(string filtrarRed, string filtrarRegional, string filtrarEnlace, string filtrarEstadoEnlace, string filtrarEstadoLegalizacion,string filtrarCompleto,string filtrarImplementado, List<MockMerge> lista)
            {
               
                List<MockMerge> lista2 = new List<MockMerge>();
                lista2 = lista;

                if (filtrarRed != null)
                {
                    var response = from s in lista2
                                   where s._numeroRed == int.Parse(filtrarRed)
                                   select s;
                    lista2 = response.Cast<MockMerge>().ToList();
                }
              
                if (filtrarRegional != null)
                {
                    var response1 = from s in lista2
                                    where s._regional.ToLower() == filtrarRegional.ToLower() 
                                    select s;
                    lista2 = response1.Cast<MockMerge>().ToList();
                }
                if (filtrarEnlace != null)
                {
                    var response2 = from s in lista2
                                    where s._enlace.ToLower() == filtrarEnlace.ToLower() 
                                    select s;
                    lista2 = response2.Cast<MockMerge>().ToList();
                }
                if (filtrarEstadoEnlace != null)
                {
                    var response4 = from s in lista2
                                    where s._estadoEnlace.ToLower() == filtrarEstadoEnlace.ToLower() 
                                    select s;
                    lista2 = response4.Cast<MockMerge>().ToList();
                }
                if (filtrarEstadoLegalizacion != null)
                {
                    var response3 = from s in lista2
                                    where s._estadoLegalizacion.ToLower() == filtrarEstadoLegalizacion.ToLower() 
                                    select s;
                    lista2 = response3.Cast<MockMerge>().ToList();
                }
                if (filtrarCompleto != null)
                {
                    Boolean dato = true;
                    if (filtrarCompleto == "No")
                        dato = false;

                    var response3 = from s in lista2
                                    where s._completo == dato
                                    select s;
                    lista2 = response3.Cast<MockMerge>().ToList();
                }
                if (filtrarImplementado != null)
                {
                    Boolean dato = true;
                    if (filtrarImplementado == "No")
                        dato = false;

                    var response3 = from s in lista2
                                    where s._implementado == dato
                                    select s;
                    lista2 = response3.Cast<MockMerge>().ToList();
                }

               
                return lista2;
            }

         

      
        

        #endregion

    }
}
